#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "Cueva.h"

class EstrategiaMovimientoEstarEnCueva : public EstrategiaMovimientoFantasma
    {
    private:
        unsigned int fila;
        unsigned int topeActual;
        Direccion* direccion;
    public:
        EstrategiaMovimientoEstarEnCueva(ObjetoVivo *unPredador, unsigned short velocidad) 
            : EstrategiaMovimientoFantasma(unPredador, new Direccion(Direccion::IZQUIERDA), velocidad){
            
            srand ( time(NULL) );
              
            double ran = rand();
            
			
			

            if(ran < 0.5)
                this->fila = Cueva::getInstance()->getExtremoSuperiorIzquierdo()->getY();
            else 
                this->fila = Cueva::getInstance()->getExtremoInferiorIzquierdo()->getY() ;

            ran = rand();
            if(ran < 0.5)
                this->direccion = new Direccion(Direccion::DERECHA);
            else 
                this->direccion = new Direccion(Direccion::IZQUIERDA);

            }
        
        virtual bool esEstrategiaEstarEnCueva(){return true;}
        
        virtual Punto* moverVirtual(Punto* punto) {
            
           // Punto* retorno;

            if(punto->getX() == Cueva::getInstance()->getExtremoSuperiorDerecho()->getX()){
                delete this->direccion;
                this->direccion = new Direccion(Direccion::IZQUIERDA);
                }

            if(punto->getX() == Cueva::getInstance()->getExtremoSuperiorIzquierdo()->getX()){
                delete this->direccion;
                this->direccion = new Direccion(Direccion::DERECHA);
                }

            if(this->direccion->esDerecha())
                return new Punto(punto->getX() + 1, this->fila);
            return new Punto(punto->getX() - 1, this->fila);
            }

        virtual void decidirNuevaDireccion(Punto* punto) {}
        ~EstrategiaMovimientoEstarEnCueva(){
            
            }
    };
